Android StrictMode 和堆转储
全部标签 长话短说,一些同事正在运行一个非常旧的设置(x86_64中的oc4jjdk1.5.6)和一个恰好是关键任务的应用程序。他们最近尝试部署应用程序的新版本,但一旦他们这样做,java进程就会抛出核心转储并死掉。问题是,核心转储似乎没问题,gdb可以打开它们,但是jmap和其他工具拒绝处理它们:#/usr/java/jdk1.5.0_06/bin/jmap/usr/java/jdk1.5.0_06/bin/javacoreAttachingtocorecorefromexecutable/usr/java/jdk1.5.0_06/bin/java,pleasewait...Erroratta
到目前为止,我已经了解了分别使用jstack和jmap生成线程转储和堆转储。但是,jstack线程转储仅包含描述每个线程堆栈的文本。使用JavaVisualVM打开堆转储(.hprof文件)仅显示堆中分配的对象。我真正想要的是能够看到堆栈,切换到特定的堆栈帧,并观察局部变量。这种事后调试通常可以使用WinDbg、gdb和核心文件(对于nativeC++程序)等工具完成。我想知道Java中是否存在这样的“核心”文件(它将允许我在非实时环境中进行调试)? 最佳答案 Java可以。如果您使用的是IBMVM,请使用com.ibm.jvm.D
好的,我已经使用Java进行了一年多的开发,并且正在努力更深入地研究该语言及其最佳实践。所以这是我所知道的:Java“按类型传递”-即基元按副本传递,对象引用按副本传递(引用指向它们在堆上的对象)。基元实例变量和引用存在于堆中的类对象中,本地基元和引用存在于栈中(在它们各自的栈帧中)。PermGen.内存空间是存储类元数据的地方(用于反射)。Heap有一个Eden空间,用于放置新对象,一个Young空间,用于保存在GC中幸存下来的对象,还有一个Tenured空间,用于放置长期存在的对象。所以这是我想了解的:JVM能够使用单个实例的静态和静态最终原语和引用位于何处?静态和静态最终对象是否
我需要查看2个死锁线程的堆栈以分析情况。JVM现在是实时的,数据也在那里,但我需要某种工具来从进程中提取它。我只关心String类型的堆栈中的6个变量。非常感谢任何想法。JVM版本6_35,它是一个linux,启用了JMX,但我没有profiler/在其上配置的调试器连接。很难重现。 最佳答案 我发现了一个使用堆转储查看器的小技巧(在本例中是YourKit,但其他人也可以)。基本上你枚举Thread类的所有实例,然后你通过名称找到你想要的线程并打开它。堆栈变量标记为,如下所示:并不是所有的变量都在这里,但是所有作为参数传递给方法的变
我正在尝试让Tomcat(目前作为服务在Windows2003机器上运行)在OutOfMemoryError上转储堆。(Tomcat正在运行Hudson,它在我构建的尾端报告堆空间问题。手动运行构建不会产生此类错误。Hudson人员需要堆转储才能开始。)按照其他地方的说明,我已经告诉Apache服务监视器配置它用来运行Tomcat的JVM,以便在遇到OutOfMemoryError时通过将以下内容添加到JVM选项来转储堆:-XX:+HeapDumpOnOutOfMemoryError然后我再次运行构建。果然,它报告存在堆错误。我扫描整个磁盘寻找默认的java_pid123.hprof文
我经常发现自己只想打印(使用每个对象的隐式toString())Java方法的每个参数。有没有一种快速的方法可以做到这一点? 最佳答案 Java编程语言没有执行此操作的结构。但是,您可以使用AOP(面向方面的编程)包之一来完成它,例如AspectJ.特别是这个线程可能是如何实现这一点的一个很好的起点:http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg09939.html然而,我个人的看法是,大多数时候AOP是一种可怕的矫枉过正。更新:哦,here's一种使用SpringA
我们在生产环境中安装了JRE,但没有安装JDK。JRE和OS的版本如下。[me@mymachine~]$java-versionjavaversion"1.6.0_45"Java(TM)SERuntimeEnvironment(build1.6.0_45-b06)JavaHotSpot(TM)64-BitServerVM(build20.45-b01,mixedmode)[me@mymachine~]$uname-aLinuxmymachine.mydomain.com3.10.35-43.137.amzn1.x86_64#1SMPWedApr209:36:59UTC2014x86_6
我运行JVisualVM(WindowsXP、SunJava1.6.0.13、32位客户端VM)来监视远程应用程序(Linux、SunJava1.6.0.07、64位服务器VM)。在启动实际的远程应用程序之前,我使用所有访问策略在远程计算机上启动jstatd:grantcodebase"file:${java.home}/../lib/tools.jar"{permissionjava.security.AllPermission;};然后我使用命令行启动实际的应用程序java-Dcom.sun.management.jmxremote.authenticate=false-Dcom.
如何在不使用类HotSpotDiagnosticMXBean的情况下从我的应用程序中创建堆转储。由于java/rt.jar的访问限制,我无法使用对HotSpotDiagnosticMXBean的依赖性来编译它。我知道如何解决eclipse.compiler错误,但如何为我的构建修复它?除了以编程方式创建堆转储之外,还有其他方法吗?此解决方案不起作用,因为它依赖于HotSpotDiagnosticMXBean:HotSpot-dependentHeapDump 最佳答案 好吧,看来你可以通过使用反射绕过限制:packagelab.he
我一直在ubuntu上使用带有cgi的lighttpd。我遇到了一个“500-内部服务器错误”案例,我想对其进行调试。当我的二进制文件崩溃时,有没有办法让lighttpd/cgi转储核心?我遇到了thispage,它有一个用于启用核心转储的字段,但在lighthtpd.conf中包含server.core-files="enable"似乎不起作用。有什么想法吗?谢谢。附言下面是我用来生成core的测试程序:intmain(){char*html="\n"\""\"Thisistitle\n"\"\n"\"Helloworld\n"\"\n"\"";html[1]='r';std::co